package cn.gzsxt.music.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;

import cn.gzsxt.music.query.CDQueryObject;

@Mapper
public interface CDMapper {
	
	/**
	 * 查询所有专辑信息或者根据条件模糊查询,分页查询
	 * @param cqo 分页信息
	 * @return
	 */
	@SelectProvider(type=CDProvider.class, method="selectCDSql")
	public List<Map<String, Object>> selectAllCD(CDQueryObject cqo);
	
	/**
	 * 查询所有专辑或者根据条件模糊查询专辑的数量
	 * @param cqo
	 * @return 返回所有专辑的数量
	 */
	@SelectProvider(type=CDProvider.class, method="selectCDCountSql")
	public Long selectAllCDPage(CDQueryObject cqo);
	
	/**
	 * 根据专辑名查询查询此专辑是否存在
	 * 在mybatis里面写应该是 like '%${name}%' 而不是 '%#{name}%' ${name}是不带单引号的，而#{name}是带单引号的
	 * @param cd_name 专辑名
	 * @return 如果专辑存在返回专辑的数据,不存在返回null
	 */
	/*@Select("select * from mc_cd where cd_name = #{cd_name}")
	public Map<String, Object> selectCD(Map<String, Object> cdName);*/
	
	/**
	 * 模糊查询到的专辑的数量
	 * 在mybatis里面写应该是 like '%${name}%' 而不是 '%#{name}%' ${name}是不带单引号的，而#{name}是带单引号的
	 * @return 返回模糊查询到的专辑的数量
	 */
	@Select("select count(*) from mc_cd cd,mc_singer singer where cd.singer_id = singer.singer_id and cd.cd_name like '%${cd_name}%'")
	public Long selectCDPage(Map<String, Object> cdName);
	
	/**
	 * 添加一个新的专辑
	 * @param map 添加专辑的数据
	 * @return 返回修改数据库影响的行数
	 */
	@InsertProvider(type=CDProvider.class, method="addCDSql")
	public int addCD(Map<String, Object> map);
	
	/**
	 * 修改一个专辑
	 * @param map 修改专辑的数据
	 * @return 返回修改数据库影响的行数
	 */
	@UpdateProvider(type=CDProvider.class, method="updateCDSql")
	public int updateCD(Map<String, Object> map);
	
	/**
	 * 查找所有歌手的数据
	 * @return 返回所有歌手的信息
	 */
	@Select("select * from mc_singer")
	public List<Map<String, Object>> selectSinger();
	
	/**
	 * 根据姓名查找歌手的id
	 * @param singerName 歌手姓名
	 * @return 返回查找到的歌手id
	 */
	@Select("select singer_id from mc_singer where singer_name like CONCAT('%',#{singer_name},'%')")
	public List<Map<String, Object>> selectSingerId(Map<String, String> singerName);
	
	/**
	 * 根据id删除专辑
	 * @param map
	 * @return 返回修改数据库影响的行数
	 */
	@Delete("delete from mc_cd where cd_id = #{cd_id}")
	public int deleteCD(Map<String, Object> map);
}
